import Vue from 'vue'
import axios from 'axios'
import VueAxios from 'vue-axios'
// 导入token包
import { getToken, removeToken, saveToken } from './token'
// 添加弹窗toast
import { Toast } from 'vant'
// 导入路由
import router from '../router/index.js'

Vue.use(VueAxios, axios)

const instance = axios.create({
    baseURL: 'http://toutiao-app.itheima.net/',
    timeout: 10000
})

// 添加请求拦截器
instance.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    if (getToken()) {  //如果有token,就进行请求拦截
        config.headers = { Authorization: `Bearer ${getToken().token}` }
    }
    return config;
}, function (error) {
    // 对请求错误做些什么
    console.dir(error);
    return Promise.reject(error);
});

// 添加响应拦截器
instance.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    return response;
},
    async function (error) {
        // 超出 2xx 范围的状态码都会触发该函数。
        // 对响应错误做点什么
        // 不是401,正常抛出错误
        if (error.response.status === 401) {
            if (getToken()) {
                try {
                    let res = await axios({
                        url: 'http://toutiao-app.itheima.net/v1_0/authorizations',
                        method: 'put',
                        headers: {
                            Authorization: `Bearer ${getToken().refresh_token}`
                        }
                    })
                    console.log(res);
                    saveToken({
                        refresh_token: getToken().refresh_token,
                        token: res.data.data.token
                    })
                    return instance(error.config)
                } catch (error) {
                    Toast.fail('登录信息过期,请重新登录')
                    removeToken()
                    router.push({ path: '/login' })
                }
            } else {
                Toast.fail('请先登录')
                router.push({ path: '/login' })
            }
        } else { }
        return Promise.reject(error);
    });

export default instance